/* Soubor je ulozen v kodovani UTF-8.
 * Kontrola kódování: Příliš žluťoučký kůň úpěl ďábelské ódy. */

package cz.vse.adventura.po1715.xforv00_forejt.hra;

import cz.pecinovsky.english.pojj.adv_framework.game_gui.IObjectG;
import cz.vse.adventura.po1715.xforv00_forejt.data.DataPkg;
import java.net.URL;
import javax.swing.Icon;
import javax.swing.ImageIcon;





/*******************************************************************************
 * Instance třídy {@code Předmět} představují předměty, které se vyskytují ve hře
 *
 * @author    jméno autora
 * @version   0.00.000
 */
public class Předmět implements IObjectG
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================

    //Prefix těžkého předmětu
    public static final char TEZKY = '#';

    //Univerzální těžký předmět
    public static final Předmět TIHA = new Předmět("#TEZKY");

//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================

    protected boolean osoba = false;
    private final boolean zvednutelný;
    private final String název;
    private final ImageIcon picture;


//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     *
     */
    public Předmět(String název)
    {
        boolean z = true;
        if (název.charAt(0) == TEZKY)
        {
            z = false;
            název = název.substring(1);
        }

        this.název = název;
        this.zvednutelný = z;

        //Načtení obrázku:
        String result;
        URL url = DataPkg.class.getResource(název+".png");
        if (url == null) {
            picture = null;
            result = "Nebyl načten";
        } else {
            this.picture = new ImageIcon(url);
            result = "Byl načten";
        }
        System.out.println(result + " obrázek předmětu: " + název);
    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================

    /***************************************************************************
     * Vrátí název dané instance.
     *
     * @return Název instance
     */
    @Override
    public String getName()
    {
        return název;
    }



    /***************************************************************************
     * Vrátí informaci o tom, dá-li se předmět zvednout a vložit do batohu.
     *
     * @return {@code true} - dá se zvednout, jinak {@code false}
     */
    @Override
    public boolean isTransportable()
    {
        return zvednutelný;
    }

    /***************************************************************************
     * Vrátí informaci o tom, jestli je předmět postavou
     *
     * @return {@code true} - dá se zvednout, jinak {@code false}
     */
    public boolean isPerson()
    {
        return osoba;
    }

    /***************************************************************************
     * Vrátí odkaz na obrázek daného předmětu.
     *
     * @return  Požadovaný odkaz
     */
    @Override
    public Icon getPicture()
    {
       return picture;
    }

//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================

    /***************************************************************************
     * Vrátí název dané instance.
     *
     * @return Nazev instance
     */
    @Override
    public String toString()
    {
        return název;
    }
//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTY A METODA MAIN =======================================================
//
//     /***************************************************************************
//      * Testovací metoda.
//      */
//     public static void test()
//     {
//         Předmět instance = new Předmět();
//     }
//     /** @param args Parametry příkazového řádku - nepoužívané. */
//     public static void main(String[] args)  {  test();  }
}
